home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1997 September / Macworld (1997-09).dmg / Serious Software / Cherwell Scientific Demos / pro Fit / pro Fit 5.0 demo (fpu).sea / pro Fit 5.0 demo (fpu) / External Modules / External modules sources / C / lissajous.c < prev    next >
Text File  |  1996-04-21  |  4KB  |  122 lines

  1. /***************************************************************************************/
  2. /* Lissajous.c                                                                          */
  3. /*                                                                                     */
  4. /* Version 26.9.94                                                                    */
  5. /***************************************************************************************/
  6.  
  7.  
  8.  #include "proFit_interface.h" 
  9.  #include <math.h> //for cos and sin
  10.  
  11.  
  12.  
  13.  
  14. /***************************************************************************************/
  15.  
  16. void SetUp (    short* const moduleKind,        /* set moduleKind to isFunction or isProgram */
  17.                 Str255 name,                    /* the name of the program or function (pascal string) */
  18.                 long* const requiredGlobals,    /* the number of bytes to be allocated in ExtModulesParamBlock.globals */
  19.                                                 /* set requiredGlobals to 0 if you don't use this feature */
  20.                 ExtModulesParamBlock* pb)        /* the complete parameter block passed by pro Fit to the */
  21.                                                 /* routines defined in this file. In most cases it can be ignored */
  22. /* SetUp is called once when the external module is linked to proFit */
  23. {
  24.     *moduleKind=isProgram;                        /* we define a program */
  25.     SetPascalStr(name,"\pLissajous",255);        /* its name */
  26.     *requiredGlobals = 0;                        /* we don't need global data */
  27. }
  28.  
  29. /***************************************************************************************/
  30.  
  31. void InitializeProg (ExtModulesParamBlock* pb)
  32.     /* Can be left emtpy if not needed. */
  33.     /* called when the external module is linked to proFit after SetUp was called */
  34.     /* can be used to inititialize global variables, etc. */
  35. {
  36.     /* initialize default values: */
  37.         pb->v[1] = 3;            /* the frequency along x */
  38.         pb->v[2] = 4;            /* the frequency along y */
  39.         pb->v[3] = 0.5;            /* the step width */
  40.         pb->v[4] = 300;            /* the number of points */
  41.  
  42. }
  43.  
  44. /***************************************************************************************/
  45.  
  46. #define H_ZOOM 200.0
  47. #define V_ZOOM 200.0
  48. #define H_OFFSET 280.0
  49. #define V_OFFSET 220.0
  50.  
  51. void Run(ExtModulesParamBlock* pb)
  52. /* pro Fit calls this function when the name of the program is chosen from the */
  53. /* Run Program submenu in the menu Calc */
  54. {
  55.         double    ex1=pb->v[1], ex2=pb->v[2],    /* buffers for input */
  56.                 ex3=pb->v[3], ex4=pb->v[4];    /* default values are stored in v[..] */
  57.         InputRec r;                    /* dto */
  58.         int i;
  59.         double angle;
  60.  
  61. // get the parameters from user, for this we prepare the inputRec r */
  62.         r[0].x = &ex1;
  63.         r[0].s = "\pFrequency x";
  64.  
  65.         r[1].x = &ex2;
  66.         r[1].s = "\pFrequency y";
  67.  
  68.         r[2].x = &ex3;
  69.         r[2].s = "\pStep [rad]";
  70.  
  71.         r[3].x = &ex4;
  72.         r[3].s = "\pNumber of points";
  73.         if (InputBox(4, &r)) return;
  74.  
  75.         if (ex4 > 32767)                     /* make sure ex4 can be cast to an integer */
  76.             ex4 = 32767;
  77.         else if (ex4 < 0)
  78.             ex4 = 0;
  79.         pb->v[1] = ex1;                        /* defaults for next time */
  80.         pb->v[2] = ex2;
  81.         pb->v[3] = ex3;
  82.         pb->v[4] = ex4;
  83.  
  84.     /* start drawing the curve: */
  85.         GrMoveTo(H_ZOOM+H_OFFSET, V_OFFSET);    /* move to the starting point */
  86.         OpenPolygon(0,0);
  87.         angle = 0;
  88.         for (i = 1;i<= ex4;i++)
  89.             {    GrLineTo(    H_ZOOM*cos(ex1 * angle)+H_OFFSET,
  90.                             V_ZOOM*sin(ex2 * angle)+V_OFFSET);
  91.                 angle += ex3;
  92.             } /* for i */ 
  93.  
  94.         ClosePolygon();
  95.     } /* run */
  96.  
  97. /***************************************************************************************/
  98.  
  99. void CleanUp (ExtModulesParamBlock* pb)
  100.     /* called when the function or program is removed from pro Fit's menus */
  101.     /* in most cases, this function can be empty */
  102. {
  103. }
  104.  
  105.  
  106. /***************************************************************************************/
  107.                         /* for functions, not used here: */
  108. /***************************************************************************************/
  109.  
  110. void InitializeFunc (Boolean* const hasDerivatives, Str255 descr1stLine, Str255 descr2ndLine,        
  111.                     short* const numberOfParams, DefaultParamInfo* const a0, ExtModulesParamBlock* pb)
  112. {}
  113. void Func (    double x, ParamArray a,    double* const y, ExtModulesParamBlock* pb)        
  114. {}
  115. void Derivatives(double x, ParamArray a, ParamArray dyda, ExtModulesParamBlock* pb)
  116. {}
  117. short Check(short paramNo, DefaultParamInfo* const a0, ExtModulesParamBlock* pb)
  118. {return ok;}
  119. void First (ParamArray a, ExtModulesParamBlock* pb)
  120. {}
  121. void Last (ExtModulesParamBlock* pb)
  122. {}